﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BussinessLogicLayer.ChucNangGV;
using BussinessLogicLayer.ChucNangQLDaoTao;
using BussinessLogicLayer.ChucNangQLKhoa;
using BussinessLogicLayer.ChucNangSV;
using DataAccessLayer;

namespace BussinessLogicLayer
{
    public class Login
    {
        /// <summary>
        /// Lấy 1 đối tượng đăng nhập để xét chức năng.
        /// </summary>
        /// <param name="user"></param>
        /// <param name="pass"></param>
        /// <returns>Trả về null nếu tên đăng nhập không có trong hệ thống hoặc đăng nhập không thành công< para> </para>
        ///             Trả về 1 đối tượng thuộc lớp GiaoVien_GV nếu tài khoản đăng nhập là giáo viên.
        ///             Trả về 1 đối tượng thuộc lớp NguoiQLDaoTao_DT nếu tài khoản đăng nhập là tk quản lý đào tạo.
        ///             Trả về 1 đối tượng thuộc lớp NguoiQLKhoa nếu tài khoản đăng nhập là tk quản lý khoa.
        ///             Trả về 1 đối tượng thuộc lớp SinhVien_SV nếu tài khoản đăng nhập là tk của sinh viên.
        /// </returns>
        public static Object[] XacThuc(string user, string pass)
        {
            TinChiEntitiesDataContext tinChiEntities = Service.TinChiDataContext;

            bool b = tinChiEntities.USERs.Select(u => u.ID).Contains(user)
                    && tinChiEntities.USERs.Select(u => u.Password).Contains(pass);
            if (!b) return null;

            NguoiQLDaoTao_DT qldt = null;
            NguoiQLKhoa_Khoa qlKhoa = null;
            SinhVien_SV sv = null;
            GiaoVien_GV gv = null;
            if (tinChiEntities.QLDAOTAOs.Count(qldaotao => qldaotao.MaNV == user)!=0)
            qldt=tinChiEntities.QLDAOTAOs.Where(qldaotao => qldaotao.MaNV == user).Select(
                qldaotao => new NguoiQLDaoTao_DT() 
                {ChucVu = qldaotao.Chucvu,
                    GioiTinh = qldaotao.Gioitinh.Value,
                    HoTen = qldaotao.Hoten,
                    MaNgQLyDaoTao=qldaotao.MaNV,
                    NgaySinh = qldaotao.Ngaysinh.Value,
                    QueQuan = qldaotao.Quequan})
                .First();

            if (tinChiEntities.QLKHOAs.Count(qlkhoa => qlkhoa.MaNV == user)!=0)
            qlKhoa = tinChiEntities.QLKHOAs.Where(qlkhoa => qlkhoa.MaNV == user).Select(
                qlkhoa => new NguoiQLKhoa_Khoa()
                    {
                        GioiTinh = qlkhoa.Gioitinh.Value,
                        Hoten = qlkhoa.Hoten,
                        MaKhoa = qlkhoa.MaKhoa,
                        MaNguoiQLyKhoa = qlkhoa.MaNV,
                        NgaySinh = qlkhoa.Ngaysinh.Value,
                        QueQuan = qlkhoa.Quequan,
                        TenKhoa = qlkhoa.KHOA.Tenkhoa
                    }).First();
            if (tinChiEntities.SINHVIENs.Count(sinhvien => sinhvien.MaSV == user)!=0)
            sv = tinChiEntities.SINHVIENs.Where(sinhvien => sinhvien.MaSV == user).Select(
                sinhvien => new SinhVien_SV()
                    {
                        GioiTinh = sinhvien.Gioitinh.Value,
                        HoTen = sinhvien.Hoten,
                        MaKhoa = sinhvien.MaKhoa,
                        MaSv = sinhvien.MaSV,
                        NgaySinh = sinhvien.Ngaysinh.Value,
                        QueQuan = sinhvien.Quequan,
                        TenKhoa = sinhvien.KHOA.Tenkhoa
                    }).First();
            if(tinChiEntities.GIAOVIENs.Count(sinhvien =>  sinhvien.MaGV==user)!=0)
            gv = tinChiEntities.GIAOVIENs.Where(giaovien => giaovien.MaGV == user).Select(
                giaovien => new GiaoVien_GV()
                    {
                        ChuyenNganh = giaovien.Chuyennganh,
                        GioiTinh = giaovien.Gioitinh.Value,
                        MaGv = giaovien.MaGV,
                        MaKhoa = giaovien.MaKhoa,
                        NgaySinh = giaovien.Ngaysinh.Value,
                        QueQuan = giaovien.Quequan,
                        TenGv = giaovien.Hoten,
                        TenKhoa = giaovien.KHOA.Tenkhoa
                    }).First();

            int count=0;
            Object[] array=new object[4];
            if(qlKhoa!=null) array[count++] = qlKhoa;
            if (qldt != null) array[count++] = qldt;
            if (sv != null) array[count++] = sv;
            if (gv != null) array[count++] = gv;

            return array.Take(count).ToArray();
        }
    }
}
